import matplotlib.pylab as plt
import numpy as np
import pandas as pd
import seaborn as sns
from tqdm import tqdm
import color_get


# 多个DataFrame的制图
# 数据默认不排序后画图
def Multi_Draw(Multi_df, titles):
    """
    多个DataFrame具有相同的指标，绘制对比图
    :param Multi_df: 多个DataFrame,这里指的应该是[df1,df2,....],array应该也可以
    :param titles: 每个DataFrame制图时的标题
    :return:
    """
    for i in range(len(Multi_df)):
        df = Multi_df[i]
        # 一次画多张图
        Nums = len(df.T.columns.values)
        print('画图程序:' + titles[i])
        print('绘制进度:')
        # 2x2图
        if Nums == 4:
            fig, axes = plt.subplots(2, 2, sharex=True, sharey=True)
            # 绘制进度条
            for j in tqdm(range(Nums)):
                ROW_2x2 = np.ceil((j + 1) / 2)
                ROW_2x2 = int(ROW_2x2) - 1
                Column = Judge.Zero2Top(j + 1, 2)
                Column -= 1
                # print(df.T.columns.values)
                axes[ROW_2x2, Column].title.set_text(df.T.columns.values[j])
                # 画直方图比折线图更加直观
                # axes[ROW_2x2, Column].plot(df.T.iloc[:, j],'g-',label=df.T.columns.values[j])
                # 绘制柱状图
                x = np.arange(len(df.T.index.values))
                y = df.T.iloc[:, j].values
                axes[ROW_2x2, Column].bar(
                    # 有多少个值
                    x=x,
                    # 数据值(高度)是多少
                    height=y,
                    # 宽度
                    # width=0.5
                    # 值标签
                    # label
                    # 行标签
                    tick_label=df.T.index.values
                )
                # 添加数据标签，数据少的时候使用
                # for a, b in zip(x, y):
                #     plt.text(a, b + 0.05, '%.0f' % b, ha='center', va='bottom')
                # print('绘制进度： ' + str((j / len(df.T.columns.values) * 100)) + '%')

        # 画3列图
        else:
            # 行数
            ROW = np.ceil(Nums / 3)
            ROW = int(ROW)
            # 是否只能画一行图
            ROW_1xn = Nums <= 3
            if ROW_1xn:
                fig, axes = plt.subplots(1, Nums, sharex=True, sharey=True)
            else:
                fig, axes = plt.subplots(ROW, 3, sharex=True, sharey=True)
            for j in tqdm(range(Nums)):
                # 获得行索引
                ROW_3x3 = np.ceil((j + 1) / 3)
                ROW_3x3 = int(ROW_3x3) - 1
                # 获得列索引
                Column = Judge.Zero2Top(j + 1, 3)
                Column -= 1

                x = np.arange(len(df.T.index.values))
                y = df.T.iloc[:, j].values
                if ROW_1xn:
                    axes[Column].title.set_text(df.T.columns.values[j])
                    # axes[Column].plot(df.T.iloc[:, j],'g-',label=df.T.columns.values[j])
                    axes[Column].bar(
                        # 有多少个值
                        x=x,
                        # 数据值(高度)是多少
                        height=y,
                        # 宽度
                        # width=0.5
                        # 值标签
                        # label
                        # 行标签
                        tick_label=df.T.index.values
                    )
                else:
                    axes[ROW_3x3, Column].title.set_text(df.T.columns.values[j])
                    # 画直方图比折线图更加直观
                    # axes[ROW_3x3, Column].plot(df.T.iloc[:, j],'g-',label=df.T.columns.values[j])
                    axes[ROW_3x3, Column].bar(
                        # 有多少个值
                        x=x,
                        # 数据值(高度)是多少
                        height=y,
                        # 宽度
                        # width=0.5
                        # 值标签
                        # label
                        # 行标签
                        tick_label=df.T.index.values
                    )
                # print('绘制进度： ' + str((j / len(df.T.columns.values) * 100)) + '%')
                #
                # 添加数据标签，数据少的时候使用
                # for a, b in zip(x, y):
                #     plt.text(a, b + 0.05, '%.0f' % b, ha='center', va='bottom')

        plt.subplots_adjust(wspace=0, hspace=0)
        # 子图标题对齐
        plt.tight_layout()
        # 制图
        df.T.plot()
        plt.title(titles[i])